package com.github.maojx0630.translate.translate.dict;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 翻译字段
 *
 * @author MaoJiaXing
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TranslateField {

    /**
     * 字典类型 或 字段名
     */
    String value();

    /**
     * 别名 翻译到指定属性名
     */
    String[] alias() default {};

    /**
     * 后缀别名 name基础上添加后缀 如果alias与suffix prefix均为空 取配置文件 也为空则翻译到字段名本身
     */
    String[] suffix() default "";

    /**
     * 前缀别名 name基础上添加后缀 如果alias与suffix prefix均为空 取配置文件 也为空则翻译到字段名本身
     */
    String[] prefix() default "";

    /**
     * 表名 如果是其他表的数据需要指定表名
     */
    String tableName() default "";

    /**
     * 字段名 表名翻译时取哪个字段的值作为query条件
     */
    String columnName() default "";

    /**
     * 分隔符 默认根据,分割 可以设置为空表示不分割
     */
    String split() default ",";

    /**
     * 值连接符 如果多值需要连接成一个字符串时使用 默认为,
     */
    String join() default ",";

    /**
     * 默认多值去重
     */
    boolean distinct() default true;

    /**
     * 值为空时策略
     */
    IfNull ifNull() default IfNull.ORIGINAL;

    String ifNullValue() default "";

    String lastSql() default "";

    String remark() default "";

    enum IfNull {

        /**
         * 空字符串
         */
        EMPTY,

        /**
         * null
         */
        NULL,

        /**
         * 原值
         */
        ORIGINAL,

        /**
         * 其他值
         */
        OTHER_VALUE
    }
}
